package com.qf.xiangqin.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
 * JdbcUtil这个类是专门处理连接数据库的和关闭资源的
 * 1.自动完成驱动的加载
 * 2.自动完成连接数据库需要的参数
 * 3.简化获取connection对象的方法
 * 4.完成close统一的方法
 */
public class JdbcUtil {
    //数据库连接池 池化技术：1.控制连接数量 2.提高复用率
   private static DataSource dataSource = null;
   //静态代码块 目的：完成静态变量的初始化
   static {
        //读取properties文件
        //1.实例化对象  properties
        //Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。 属性列表中的每个键及其对应的值都是一个字符串。
        Properties properties = new Properties();
        try {
            //2.将db.propertyies弄成了一个流对象了，然后通过properties对象去加载此流
            ///db.properties  里面东西都扔给了  properties  对象
            properties.load(JdbcUtil.class.getResourceAsStream("/druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取Connection
     */
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    /**
     *完成close方法
     *增删改 是关两种对象  查询的时候需要关闭三个对象  */
    public static void close (Connection connection) {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**
     *完成close方法
     *增删改 是关两种对象  查询的时候需要关闭三个对象  */
    public static void close (Connection connection, Statement statement) {
        try {
            connection.close();
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**
     *完成close方法
     *增删改 是关两种对象  查询的时候需要关闭三个对象  */
    public static void close (Connection connection, Statement statement, ResultSet resultSet) {
        try {
            connection.close();
            statement.close();
            resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
